13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6nDqSBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gTmF2aWdhdGV1cnMgw6AgcHJpdmlsw6lnaWVyOiBDaHJvbWUsIE9wZXJhLCBFZGdlLiBGaXJlZm94IHBldXQgcG9zZXIgcHJvYmzDqG1lIChuZSBmb25jdGlvbm5lIHBhcyBkYW5zIElFKS4gIA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiAuLi5gICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGV1eCB2dWVzIGRlcyBkb25uw6llczogYGxpZ25lc2AgZXQgYGVudHLDqWVzLmAgTGVzIGRvbm7DqWVzIHNvbnQgZ8OpbsOpcmFsZW1lbnQgcHLDqXNlbnTDqWVzIGVuIG1vZGUgYGxpZ25lc2AsIGMnZXN0LcOgLWRpcmUgY2hhcXVlIGxpZ25lIHJlcHLDqXNlbnRlIHVuZSBvYnNlcnZhdGlvbi4gTGUgbW9kZSBgZW50csOpZXNgIHBlcm1ldCBkJ2Fzc29jaWVyIHBsdXNpZXVycyBsaWduZXMgw6AgdW5lIG9ic2VydmF0aW9uLg0KDQotIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHN0cnVjdHVyZSBkdSBmaWNoaWVyIHBvdXIgcXVlIHBsdXNpZXVycyBsaWduZXMgc29pZW50IGFzc29jacOpZXMgw6AgdW4gc2V1bCBjYXMgZW4gc2UgYmFzYW50IHN1ciBsYSBjb2xvbm5lIGNsw6kgKCoqc2V1bGUgbGEgbGlnbmUgb3JpZ2luYWxlIHNlcmEgbnVtw6lyb3TDqWUqKiksIG1haXMgZG9pdCBzZSBmYWlyZSBhdmVjIHByw6ljYXV0aW9ucy4gUG91ciBsZXMgbG9naWNpZWxzIGQnYW5hbHlzZSwgbGUgZm9ybWF0ICp0aWR5KiAoYGxpZ25lc2ApIGVzdCDDoCBwcml2aWzDqWdpZXIuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KMS4gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLg0KMi4gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4NCjMuIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuDQo0LiBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLg0KNS4gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuDQo2LiBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuDQo3LiBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLg0KOC4gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4NCjkuIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlICpBdXRyZXMqLCDDqWRpdGVyIHNvbiBjb250ZW51IHBvdXIgKmF1dHJlKiBldCBhcHBsaXF1ZXIgw6AgbGEgY2VsbHVsZS4gDQoNCi0gRGFucyBsYSBjb2xvbm5lICrDiXZhY3VhdGlvbiosIG1vZGlmaWVyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSAiIyIgcGFyICpOb24qIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzICANCg0KDQojIyMjIFRyb2lzIGZvcm1hdHMgZGUgYmFzZTogDQogIDEuIENoYcOubmUgZGUgY2FyYWN0w6hyZXMNCiAgMi4gTm9tYnJlDQogIDMuIERhdGUgKG5vcm1lIElTTy04NjAxIFlZWVktTU0tRERUSEg6TU06U1NaKSoNCiAgDQoNCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KDQoNCiMjIyMgRGV1eCBhdXRyZXMgdHlwZXMgcGFydGljdWxpZXJzIGTDqWNvdWxhbnQgZGUgbWFuaXB1bGF0aW9ucw0KICAtIEJvb2zDqWVuICh2YWxldXIgYmluYWlyZSBUIG91IEYpDQogIC0gKkFycmF5KiAobGlzdGUgZGUgdmFsZXVycyBzw6lwYXLDqWVzIHBhciB1bmUgdmlyZ3VsZSBlbnRyZSBjcm9jaGV0cyBwb3V2YW50IMOqdHJlIHRyYW5zZm9ybcOpZXMpDQoNCjwvYnI+DQoNCiMjIyMjICogRm9ybWF0IGRhdGUNCg0KLSBTZWxvbiBsZXMgYmVzb2lucywgbGVzIGRhdGVzIHBldXZlbnQgw6p0cmUgdHJhaXTDqWVzIHNvdXMgZm9ybWUgZGUgYHRleHRlYCwgZGUgYG5vbWJyZWAgb3UgYGRhdGVgIChsZSBmb3JtYXQgZGF0ZSBlc3Qgc3VydG91dCBuw6ljZXNzYWlyZSBwb3VyIGxlcyBjYWxjdWxzIGRlIGRhdGVzKS4NCi0gTGUgZm9ybWF0IGRhdGUgcmVwb3NlIHN1ciB1bmUgc8OpcmllIGQnb3V0aWxzIGV0IGRlICBzdGFuZGFyZHMgcG91ciByZWNvbm5haXRyZSBldCBjb252ZXJ0aXIgbGVzIHZhbGV1cnMgb3JpZ2luYWxlcyBlbiBkYXRlLiANCi0gUG91ciBxdSd1bmUgY2VsbHVsZSBzb2l0IHJlY29ubnVlIGNvbW1lIGRhdGUsIGVsbGUgc2VyYSB0cmFuc2Zvcm3DqWUgYXUgZm9ybWF0ICpJU08tODYwMS1jb21wbGlhbnQqLg0KLSBQb3NzaWJsZSBkZSBtb2RpZmllciBjZSBmb3JtYXQgcG91ciBxdSdpbCBzb2l0IHBsdXMgZmFjaWxlbWVudCBsaXNpYmxlIMOgIGwnZXhwb3J0YXRpb24uDQoNCjwvYnI+DQoNCiMjIyMjICoqIEZvcm1hdCAibWFucXVhbnQiDQoNCi0gT3BlblJlZmluZSBmYWl0IHVuZSBkaXN0aW5jdGlvbiBlbnRyZSBsZXMgKipjZWxsdWxlcyB2aWRlcyBhdmVjIGVzcGFjZXMgYmxhbmNzKiogKHF1aSBuZSBzb250IHBhcyB2aWRlcyEpLCBsZXMgKip2YWxldXJzIHZpZGVzKiogKGNoYWluZSBkZSBsb25ndWV1ciAwKSwgZXQgbGVzICoqdmFsZXVycyAibnVsbCIqKiAodHlwZSBzcMOpY2lhbCBxdWkgbidlc3QgcGFzIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMpLiBMZXMgKnZpZGVzKiBldCBsZXMgKm51bGwqIHNvbnQgYXVzc2kgY29uc2lkw6lyw6lzIGNvbW1lICpCbGFuayouDQotIFBsdXNpZXVycyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBzb3VzIGBGYWNldHRlc2AgZXQgYMOJZGl0ZXIgbGVzIGNlbGx1bGVzYCBwZXJtZXR0ZW50IGRlIGfDqXJlciBjZXMgdHlwZXMgZGUgdmFsZXVycy4NCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkZSBmb3JtYXQgY2FyYWN0w6hyZSBlbiBmb3JtYXQgZGF0ZSoqOiAgDQotIERhbnMgbGEgY29sb25uZSAqSm91ciBjYWxlbmRhaXJlKjogYE1lbnUgLT4gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYCAgICANCg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkZSBmb3JtYXQgY2FyYWN0w6hyZSBlbiBmb3JtYXQgbm9tYnJlKio6ICAgDQotIERhbnMgbGEgY29sb25uZSAqUG9ydGUqLCBjbGlxdWVyIGRhbnMgdW5lIGNlbGx1bGUsIMOpZGl0ZXIgbGUgZm9ybWF0IMOgICpOb21icmUqIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQotIFJlY29tbWVuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyBsZSBmb25jdGlvbiAqVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyouDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KLSDDgCBsJ2ltcG9ydGF0aW9uIGQndW4gZmljaGllciwgY2hhcXVlIGNlbGx1bGUgc2UgdmVycmEgYXR0cmlidWVyIHVuIGZvcm1hdC4gDQotIFBhciBkw6lmYXV0LCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlc3QgZGUgZm9ybWF0IGNoYcOubmVzLiAgDQotIExlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIHJlY29ubnUgY29tbWUgbnVtw6lyaXF1ZSBldCBkYXRlIHNlcmEgZGUgY291bGV1ciB2ZXJ0ZS4gIA0KLSBMZSBmb3JtYXQgcGV1dCDDqnRyZSBtb2RpZmnDqSBkZSBkaWZmw6lyZW50ZXMgZmHDp29uczogQm91dG9uIGBlZGl0YCwgYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBGZW7DqnRyZSBHUkVMLiAgDQotIENlIGZvcm1hdCBhdXJhIHVuIGltcGFjdCBzdXIgbGVzIGFjdGlvbnMgcG9zc2libGVzLiAgDQotIExlIGNoYW5nZW1lbnQgZGUgZm9ybWF0IHBhciDDqWRpdGlvbiBkaXJlY3RlIGQndW5lIGNlbGx1bGUgZXN0IHVuZSBvcMOpcmF0aW9uIGRpc3RpbmN0ZSBkZSBsYSB0cmFuc2Zvcm1hdGlvbiBkdSBjb250ZW51LiBMYSBwcmVtacOocmUgb3DDqXJhdGlvbiBhcnJpdmUgcGFyZm9pcyDDoCBjaGFuZ2VyIGRlcyBmb3JtYXRzIHF1ZSBsYSB0cmFuc2Zvcm1hdGlvbiBuZSBwZXV0IGZhaXJlLg0KLSBQb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiBzdXIgbGVzIGZvcm1hdHMsIHZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHBsb3JpbmcpLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4zLiBMYSBnZXN0aW9uIGRlcyBsaWduZXMgZXQgY29sb25uZXMNCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBjb2xvbm5lcyBwZXV0IHNlIGZhaXJlOg0KDQotIFN1ciBjaGFxdWUgY29sb25uZTogDQogIC0gRm9uY3Rpb25zIHNvdXMgYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEw6lwbGFjZXIgLi4uIC8gUmVub21tZXIgLyBTdXBwcmltZXJgICAgDQogIC0gRm9uY3Rpb25zIHNvdXMgYEFwZXLDp3UgLT4gTWFzcXVlci4uLiBgICAgDQoNCjwvYnI+DQoNCi0gU3VyIGxhIGNvbG9ubmUgYFRvdXRlc2A6ICAgICANCiAgLSBgw4lkaXRlciBsZXMgY29sb25uZXMgLT4gUmV0cmllci1zdXBwcmltZXIsIGdlc3Rpb24gZGVzIHZhbGV1cnMgY29uc8OpY3V0aXZlc2AgICAgDQogIC0gYEFwZXLDp3UgLT4gQWZmaWNoZXItbWFzcXVlcmAuLi4gIA0KDQo8L2JyPg0KDQojIyMjIExhIGdlc3Rpb24gZGVzIGxpZ25lczoNCg0KLSBMYSBzw6lsZWN0aW9uIGRlIGxpZ25lcyBwZXV0IHNlIGZhaXJlIHBhciBsZSBiaWFpcyBkZSBmaWx0cmVzLCBmYWNldHRlcyBldCBhdXRyZXMgbWFuaXB1bGF0aW9ucyBwZXJzb25uYWxpc8OpZXMuICANCi0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIG1hcnF1ZXIvw6l0b2lsZXIgZGVzIGxpZ25lcyBlbiBsb3Qgb3UgaW5kaXZpZHVlbGxlbWVudCBwdWlzIGRlIGNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBgVG91dGVzYCBwb3VyIHPDqWxlY3Rpb25uZXIgbGVzIGxpZ25lcyBtYXJxdcOpZXMgKGB0cnVlYCkuICANCi0gT24gcGV1dCBlbnN1aXRlIHN1cHByaW1lciBsZXMgbGlnbmVzIGZpbHRyw6llczogYFRvdXRlcyAtPiDDiWRpdGVyIGxlcyBsaWduZXMgLT4gU3VwcHJpbWVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudGVzYC4gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipTdXBwcmltZXIgdW5lIGNvbG9ubmU6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlR5cGUgZCdpbmNpZGVudCogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBTdXBwcmltZXIgY2V0dGUgY29sb25uZWAuICANCg0KKipTdXBwcmltZXIgcGx1c2lldXJzIGNvbG9ubmVzOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUb3V0ZXMqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gw4lkaXRlci9TdXBwcmltZXIgbGVzIGNvbG9ubmVzYCAtPiAqS0ZTKiBldCAqQ0FUKi4gIA0KDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNS40LiBIaXN0b3JpcXVlIChVbmRvL1JlZG8pDQoNCi0gVG91dGVzIGxlcyBhY3Rpb25zIHNvbnQgZW5yZWdpc3Ryw6llcyAobG9nIGRlIHNlcyBtYW5pcHVsYXRpb25zKSBldCBwZXV2ZW50IMOqdHJlIGFubnVsw6llcyBlbiByZWN1bGFudCDDqXRhcGUgcGFyIMOpdGFwZSBkYW5zIGwnaGlzdG9yaXF1ZS4gIA0KLSBMYSBwcmVtacOocmUgYWN0aW9uIGQndW4gaGlzdG9yaXF1ZSBlc3QgbGEgY3LDqWF0aW9uIGR1IHByb2pldC4gIA0KLSBQdWlzcXVlIGwnaGlzdG9yaXF1ZSBmYWl0IHBhcnRpZSBkdSBwcm9qZXQgZW5yZWdpc3Ryw6kgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwsIGlsIG5lIGRpc3BhcmFpdCBwYXMgw6AgbGEgZmVybWV0dXJlIGRlIGxhIHNlc3Npb24uIA0KLSBMJ2hpc3RvcmlxdWUgcGV1dCDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OLCBjb3BpZXIvY29sbGVyIGRhbnMgbm90ZXBhZCBldCBhcHBsaXF1ZXIgZGUgbm91dmVhdS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxOS5qcGcpe3dpZHRoPTYwJX0NCg0KPC9jZW50ZXI+ICANCg0KKipBdHRlbnRpb24hKioNCg0KLSBTaSBvbiByZWN1bGUgZGFucyBsZSB0ZW1wcyBldCBxdSdvbiBmYWl0IHVuZSBtb2RpZmljYXRpb24sIGxlcyDDqXRhcGVzIHF1aSBzdWl2ZW50IGRhbnMgbCdoaXN0b3JpcXVlIGRpc3BhcmFpc3NlbnQgcG91ciBkZSBib24uICANCg0KLSBMZXMgbWFuaXB1bGF0aW9ucyByZWxhdGl2ZXMgw6AgbCdhZmZpY2hhZ2UgbmUgc29udCBwYXMgZW5yZWdpc3Ryw6llcyBkYW5zIGwnaGlzdG9yaXF1ZSwgc2V1bGVtZW50IGxlcyB0cmFuc2Zvcm1hdGlvbnMuIEwnZW5yZWdpc3RyZW1lbnQgYXV0b21hdGlxdWUgbmUgY29tcHJlbmQgZG9uYyBwYXMgbGVzIGZhY2V0dGVzIGV0IGZpbHRyZXMgKHZ1ZSBkZSBsJ2ludGVyZmFjZSkgLSBwZXJkIGNlIHF1aSBuJ2FwcGFyYWl0IHBhcyBkYW5zIGxlIGBEw6lmYWlyZS9SZWZhaXJlYC4NCg0KLSBMJ8OpZGl0aW9uIGRpcmVjdGUgZGFucyBsZXMgY2VsbHVsZXMgYXBwYXJhaXQgZGFucyBsJ2hpc3RvcmlxdWUgbWFpcyBuZSBwZXV0IMOqdHJlIGV4cG9ydMOpZS4gIA0KDQotIEZhY2V0dGVzIGV0IGZpbHRyZXMgcydlbnJlZ2lzdHJlbnQgZ3LDomNlIGF1IGBwZXJtYWxpZW5gLiAgDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgNi4gTWVudSBldCBmb25jdGlvbnMNCg0KT3BlbiBSZWZpbmUgcGVybWV0IGRlIHRyYXZhaWxsZXIgZGUgKipkZXV4IGZhw6dvbnMqKjogIA0KDQoNCjEuIEF2ZWMgbCdlbnNlbWJsZSBkZXMgKipmb25jdGlvbnMgYXV0b21hdGlzw6llcyoqIHF1ZSBsJ29uIHJldHJvdXZlIGRhbnMgbGVzIG1lbnVzLg0KDQoyLiBFbiByw6lkaWdlYW50IHNlcyBwcm9wcmVzIFtleHByZXNzaW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucykgYXZlYyBsZSAqKmxhbmdhZ2UgR1JFTCoqLiAgDQoNCiAgLSBNw6ptZSBsb3JzcXVlIGwnb24gdXRpbGlzZSBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMsIGlsIGVzdCBwb3NzaWJsZSBkJ2VuIG1vZGlmaWVyIGxlIGZvbmN0aW9ubmVtZW50IGVuIMOpZGl0YW50IGRpcmVjdGVtZW50IGxhIHN5bnRheGUgR1JFTCBjb3JyZXNwb25kYW50ZS4gDQoNCjwvYnI+DQoNCiMjIDYuMS4gVXRpbGlzZXIgbGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzOg0KDQotIExlIG1lbnUgZXQgbCdlbnNlbWJsZSBkZSBzZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgYXBwYXJhaXNzZW50IGVuIGNsaXF1YW50IHN1ciBsYSBmbMOoY2hlIGRlIGwnaW50aXR1bMOpIGRlIGNoYXF1ZSBjb2xvbm5lLg0KDQotIExlcyBmb25jdGlvbnMgZGlzcG9uaWJsZXMgc291cyBsZSBtZW51IGRlIGxhIHByZW1pw6hyZSBjb2xvbm5lIGBUb3V0ZXNgIHNlIGRpc3Rpbmd1ZW50IGRlcyBhdXRyZXMgcHVpc3F1J2VsbGVzIHBlcm1ldHRlbnQgZCdhcHBsaXF1ZXIgZGVzIGZvbmN0aW9ucyDDoCBsJ2Vuc2VtYmxlIGRlcyBjb2xvbm5lcyBkdSBmaWNoaWVyOiBNYXJxdWVyLCDDqXRvaWxlciwgc3VwcHJpbWVyLCBtYXNxdWVyLi4uDQoNCjwvYnI+DQoNCioqTWVudSBldCBmb25jdGlvbnMgZGUgY2hhcXVlIGNvbG9ubmUtdmFyaWFibGUqKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTIuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqTWVudSBldCBmb25jdGlvbnMgZGUgbGEgY29sb25uZSBgVG91dGVzYCoqDQoNCiFbXShpbWFnZXMvT1IyMS5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gw4ljcmlyZSBzZXMgZm9uY3Rpb25zIGF2ZWMgR1JFTA0KDQo8L2JyPg0KDQpFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBFeGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCioqTGUgbGFuZ2FnZSBHUkVMIHBldXQgcyd1dGlsaXNlciBkZSBkaWZmw6lyZW50ZXMgZmHDp29uczoqKiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjMuIFRyaWVyIHVuIGZpY2hpZXINCg0KLSBMZXMgZG9ubsOpZXMgYXBwYXJhaXNzZW50IGRhbnMgbCdvcmRyZSBkdSBmaWNoaWVyIG9yaWdpbmFsLg0KLSBQb3VyIG1vZGlmaWVyIGwnb3JkcmUgZCdhcHBhcml0aW9uIGRlcyBvYnNlcnZhdGlvbnMsIGFwcGxpcXVlciB1biBvdSBkZXMgdHJpcyBzdXIgbGVzIGNvbG9ubmVzIGF2ZWMgYFRyaWVyLi4uYA0KLSBQb3VyIGNvbWJpbmVyIHBsdXNpZXVycyB0cmlzIHN1ciBkaWZmw6lyZW50ZXMgY29sb25uZXM6IEZhaXJlIHVuIHRyaWUgc3VyIHVuZSBjb2xvbm5lIHB1aXMgc3VyIHVuZSBhdXRyZSBlbiBtb2RpZmlhbnQgc2kgbsOpY2Vzc2FpcmUgbCdvcHRpb24gYFRyaWVyIHNlbG9uIGNldHRlIHNldWxlIGNvbG9ubmVgLg0KLSBMZXMgdHJpcyBuZSBzb250IHF1ZSB0ZW1wb3JhaXJlcyBldCBuJ2FmZmVjdGVudCBkb25jIHF1ZSBsJ2FmZmljaGFnZS4gUG91ciBxdSdpbHMgc29pZW50IHBlcm1hbmVudHMgKHJlbnVtw6lyb3RhdGlvbiBkZXMgbGlnbmVzKTogYFRyaWVyIC0+IFJldHJpZXIgbGVzIGxpZ25lcyBkZSBmYcOnb24gcGVybWFuZW50ZWAqLiAgDQotIElsIGVzdCBwb3NzaWJsZSBkZSBzdXBwcmltZXIgZXQgZCdpbnZlcnNlciBsZSB0cmkgw6AgcGFydGlyIGRlcyBvcHRpb25zIHN1ciBjaGFxdWUgY29sb25uZSBvdSBncsOiY2Ugw6AgbGEgZm9uY3Rpb24gYFRyaWVyYCBkdSBoYXV0LiAgDQoNCiAqTGUgdHJpIHBlcm1hbmVudCBhZmZlY3RlIHRvdXQgbGUgZmljaGllciwgcGFzIHNldWxlbWVudCBsYSB2dWUgZmlsdHLDqWUuICANCg0KIVtdKGltYWdlcy9PUjYuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBjYWxlbmRhaXJlYCBlbiBmb3JtYXQgYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgTW9pcyBDYWxlbmRyaWVyYCAuICAgDQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBKb3VyIGR1IG1vaXNgLiAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiAgIA0KLSBTdXBwcmltZXIgbGUgdHJpIGV0IHJlY29tbWVuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyB1biB0cmkgZGUgZm9ybWF0IG5vbWJyZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDYuNC4gRmlsdHJlciBsZSB0ZXh0ZQ0KDQotIExhIGZvbmN0aW9uIGBGaWx0cmVyIGxlIHRleHRlYCBwZXJtZXQgZGUgY2hlcmNoZXIgdW5lIG91IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIG91IHBsdXNpZXVycyB2YXJpYWJsZXMuICANCi0gUGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgY29sb25uZSBldCBkZSBjb21iaW5lciBkZXMgZmlsdHJlcyBhcHBsaXF1w6lzIHN1ciBwbHVzaWV1cnMgY29sb25uZXMgcG91ciByYWZmaW5lciBsYSByZWNoZXJjaGUuICANCi0gRm9uY3Rpb24gcGx1cyBleHDDqWRpdGl2ZSBxdWUgbGVzIGZhY2V0dGVzIHF1YW5kIG9uIG5lIHZldXQgcXVlIGNoZXJjaGVyIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMuICANCi0gTCdhZmZpY2hhZ2UgZGVzIGxpZ25lcyBzZSBsaW1pdGVyYSBhdSBub21icmUgZGUgY2FzIGNvcnJlc3BvbmRhbnRzIGF1eCBjcml0w6hyZXMgZGUgcmVjaGVyY2hlIGluc2NyaXRzIGRhbnMgbGVzIGJvaXRlcyBkZSBmaWx0cmVzLiAgDQotICoqVGFudCBxdWUgbGVzIGZpbHRyZXMgc2Vyb250IGFjdGlmcywgbGVzIGFjdGlvbnMgc3Vic8OpcXVlbnRlcyBzZSBsaW1pdGVyb250IMOgIGNlcyBjYXMgZmlsdHLDqXMuKiogIA0KDQohW10oaW1hZ2VzL09SNy5qcGcpIA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipMaW1pdGVyIGxhIGxpc3RlIGF1eCBjYXMgc3VydmVudXMgw6AgbGEgc3RhdGlvbiBCZXJyaSBlbnRyZSBtaWRpIGV0IDEzaC4qKg0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqOiAiYmVycmkiICANCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqSGV1cmUgZGUgbCdpbmNpZGVudCo6ICIxMiIgIA0KLSBFeHBsb3JlciBsZXMgcsOpc3VsdGF0cyAgDQotIENvbW1lbnQgcydhc3N1cmVyIGQnYXZvaXIgc2V1bGVtZW50IGxlcyBjYXMgc3VydmVudXMgZW50cmUgMTJoIGV0IDEzaD8gQ29tYmllbiBkZSBsaWduZXMgY29ycmVzcG9uZGVudCDDoCBjZXMgY29uZGl0aW9ucz9eWzEyOiBvdSBleHByZXNzaW9uIHJhdGlvbm5lbGxlIF4xMiAvIDQ4IGNhc10gIA0KLSBTdXBwcmltZXIgdG91cyBsZXMgZmlsdHJlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDcuIExlcyBmYWNldHRlcw0KDQojIyA3LjEgQ2FyYWN0w6lyaXN0aXF1ZXMNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL09SMzQuanBnIiAgd2lkdGg9IjYwJSIgLz4NCjwvZGl2Pg0KDQotIExlcyBmYWNldHRlcyBjb25zdGl0dWVudCBsYSBtYXJxdWUgZGUgY29tbWVyY2UgZCdPcGVuUmVmaW5lLCBkJ2/DuSBsZSBsb2dvISANCg0KLSBGb25jdGlvbm5hbGl0w6kgcHVpc3NhbnRlIHF1aSBwZXJtZXQgZCdleHBsb3JlciBldCBkZSBmaWx0cmVyIHNlcyBkb25uw6llcyBlbiBmb25jdGlvbiBkZSBkaWZmw6lyZW50ZXMgY29uZGl0aW9ucy4gIA0KDQotIE4nYWZmZWN0ZW50IHBhcyBkaXJlY3RlbWVudCBsZXMgZG9ubsOpZXMsIHNldWxlbWVudCBsYSBwcsOpc2VudGF0aW9uLiAgDQoNCi0gw4AgbGEgYmFzZSwgdW5lIGZhY2V0dGUgY29ycmVzcG9uZCDDoCBsYSBsaXN0ZSBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZCd1bmUgdmFyaWFibGUgIChldCBkZSBsZXVyIG9jY3VycmVuY2UpIHByw6lzZW50w6llIHNlbG9uIGxlIGZvcm1hdCAoY2hhaW5lLCBudW3DqXJpcXVlLCBkYXRlKS4gIA0KDQotIFBlcm1ldHRlbnQgdW5lIGV4cGxvcmF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZXQgZGUgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzIHBsdXMgw6lsYWJvcsOpZXMgcXVlIGxlcyBmaWx0cmVzLiAgDQoNCi0gT24gcGV1dCBhaW5zaSBpZGVudGlmaWVyIGxlcyB0ZW5kYW5jZXMsIGxlcyByw6lndWxhcml0w6lzLCBsZXMgZXJyZXVycywgbGVzIMOpY2FydHMsIGxlcyByw6lww6l0aXRpb25zIGV0ICBjaWJsZXIgbGVzIHZhbGV1cnMgZGUgc291cy1ncm91cGVzIHByw6ljaXMuICANCg0KLSBDZXMgc291cy1ncm91cGVzIHBldXZlbnQgZW5zdWl0ZSDDqnRyZSDDqWRpdMOpcyBldCBleHBvcnTDqXMgKGJvdXRvbiBgRXhwb3J0ZXJgIGVuIGhhdXQgw6AgZHJvaXRlKS4gDQoNCjwvYnI+DQoNCiMjIyBEZXV4IHR5cGVzIGRlIGZhY2V0dGVzOg0KDQogIC0gTGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgKipbMV0qKi4gICANCiAgPC9icj4NCiAgLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICoqWzJdKiouICANCiAgPC9icj4NCiAgICAtIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAqKlszXSoqIChvbiBwYXJsZSBlbmNvcmUgaWNpIGRlICpmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMqLCBtYWlzIGVsbGVzIGRvaXZlbnQgw6p0cmUgcsOpZGlnw6llcyBtYW51ZWxsZW1lbnQpLg0KDQo8L2JyPg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMy5qcGcpDQo8L2NlbnRlcj4gIA0KDQogIC0gKipbOF0qKiBMZSBsaWVuIGBjaGFuZ2VyYCBwZXJtZXQgZCdvdXZyaXIgdW5lICoqZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMKiogcG91ciBtb2RpZmllciBsYSBzeW50YXhlIGRlIGxhIGZhY2V0dGUuICANCiAgLSAqKls5XSoqIFBvdXIgc3VwcHJpbWVyIGxlcyBmYWNldHRlcywgY2xpcXVlciBzdXIgbGUgeCBkZSBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgc3VwcHJpbWVyYC4gIA0KICAtIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQogIC0gKipbMTBdKiogT3B0aW9uIGBHcm91cGVgOiBPdXRpbHMgcHJvcG9zYW50IGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzIGRlIHNpbWlsYXJpdMOpIHBlcm1ldHRhbnQgZGUgcmVncm91cGVyIGRlcyBjYXTDqWdvcmllcyBzZW1ibGFibGVzLiAgDQoNCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAoTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyBwcm9wb3NlbnQgYXVzc2kgZGVzIGZhY2V0dGVzIGJvb2zDqWVubmVzKS4gICANCg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlICoqWzQtNV0qKiANCg0KLSBUeXBlIGRlIGZhY2V0dGUgbGUgcGx1cyBzb3V2ZW50IHV0aWxpc8OpLiAgIA0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgIA0KICAtIE9uIHBldXQgZmFpcmUgdW5lIGZhY2V0dGUgdGV4dHVlbGxlIHN1ciB1bmUgY29sb25uZSBudW3DqXJpcXVlIG1haXMgcGFzIGwnaW52ZXJzZS4gIA0KICAtIDIwMDAgdmFsZXVycyBtYXhpbXVtIHBhciBkw6lmYXV0IG1haXMgcGV1dCDDqnRyZSBtb2RpZmnDqSBkYW5zIGxlcyBwcsOpZsOpcmVuY2VzLiBTaSBsZXMgdmFsZXVycyBzb250IHRyb3Agbm9tYnJldXNlcywgZWxsZXMgbmUgc2Vyb250IHBhcyBsaXN0w6llcyAodW4gZmlsdHJlIHBvdXJyYWl0IMOqdHJlIHV0aWxpc8OpKS4gDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgIA0KICAtIENsaXF1ZXIgYGluY2x1cmVgIG91IGBleGNsdXJlYCBwb3VyIHPDqWxlY3Rpb25uZXIgb3Ugc3VwcHJpbWVyIGRlcyBjaG9peCBtdWx0aXBsZXMgKipbMTJdKiouICAgDQogIC0gVW5lIGZvaXMgbGEgc8OpbGVjdGlvbiBmYWl0ZSwgbCdvcHRpb24gYGludmVyc2VyYCBwZXJtZXQgZGUgc8OpbGVjdGlvbm5lciB0b3V0IFNBVUYgbGEgc8OpbGVjdGlvbiAqKlsxMV0qKi4gICANCiAgLSBQZXV2ZW50IMOqdHJlIHRyacOpZXMgc2Vsb24gbGUgbm9tIG91IGxlIGNvbXB0ZSAobm9tYnJlIGQnb2NjdXJyZW5jZXMpLiAgIA0KLSBQZXJtZXR0ZW50ICoqZOKAmcOpZGl0ZXIgbGVzIHZhbGV1cnMqKiAoY29udGVudSBkZSBjaGFxdWUgY2VsbHVsZSBjb3JyZXNwb25kYW50ZSkgKipbMTNdKiouICANCg0KDQojIyMjIDIuIEZhY2V0dGUgbnVtw6lyaXF1ZSAqKls3XSoqDQoNCi0gVmlzdWFsaXNlciBldCBzw6lsZWN0aW9ubmVyIGxlcyB2YWxldXJzIGTigJl1bmUgdmFyaWFibGUgbnVtw6lyaXF1ZSBhbGxhbnQgZGUgbGEgcGx1cyBwZXRpdGUgw6AgbGEgcGx1cyBncmFuZGUuICANCg0KDQojIyMjIDMuIEZhY2V0dGUgY2hyb25vbG9naXF1ZSAqKls2XSoqDQoNCi0gVmlzdWFsaXNlciBldCBzw6lsZWN0aW9ubmVyIGxlcyB2YWxldXJzIGTigJl1bmUgY29sb25uZSBkYXRlIGVuIGxpZ25lIGR1IHRlbXBzLiAgDQoNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipGaWx0cmVyKiogDQoNCi0gRXhwbG9yZXIgbGVzIHZhbGV1cnMgZGUgbGEgdmFyaWFibGUgKkNhdXNlIHByaW1haXJlKi4gUXVlbGxlIGVzdCBsYSBkZXV4acOobWUgcGx1cyBmcsOpcXVlbnRlPyANCi0gUXVlbGxlcyBzb250IGxlcyBjYXTDqWdvcmllcyBkZSAqQ2F1c2Ugc2Vjb25kYWlyZSogcmVsacOpZXMgw6AgbGEgKkNhdXNlIHByaW1haXJlICJDbGllbnTDqGxlIio/ICAgDQotIFF1ZWxsZSBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlPyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gQ29tYmllbiBkZSBjYXMgY29ycmVzcG9uZGVudCDDoCBjZXR0ZSBzw6lsZWN0aW9uPyAgDQotIMOAIHF1ZWwgKmpvdXIgZGUgbGEgc2VtYWluZSogY2V0dGUgY2F1c2UgZXN0LWVsbGUgc3VydmVudWUgbGUgcGx1cyBzb3V2ZW50P15bQ2xpZW50w6hsZSAvIEJsZXNzw6llIG91IG1hbGFkZSwgTcOpZmFpdCB2b2xvbnRhaXJlLCBOdWlzYW5jZSBpbnZvbG9udGFpcmUgLyBNw6lmYWl0IHZvbG9udGFpcmUgNzgxLyA1XSAgIA0KLSBSw6lpbml0aWFsaXNlciB0b3V0ZXMgbGVzIGZhY2V0dGVzLg0KDQotIEV4cGxvcmVyIGxlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgKlBhciBtb3QqIGV0ICpkb3VibG9ucyogc3VyIGxhIGNvbG9ubmUgKkNhdXNlIHByaW1haXJlKi4NCg0KKirDiWRpdGVyKiogIA0KDQotIERhbnMgbGEgZmFjZXR0ZSAqQ2F1c2UgcHJpbWFpcmUqLCByZW5vbW1lciBsYSB2YWxldXIgImF1dHJlIiBwb3VyIHF1J2VsbGUgc29pdCBmdXNpb25uw6llIMOgIGxhIHZhbGV1ciAiQXV0cmVzIi4gIA0KLSBTdXBwcmltZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkZpbHRyZXIqKiANCg0KLSBRdWVsIGVzdCBsZSAqc3ltcHRvbWUqIGxlIHBsdXMgZnLDqXF1ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBDZXMgw6l2w6luZW1lbnRzIG9udC1pbHMgbsOpY2Vzc2l0w6kgdW5lICrDqXZhY3VhdGlvbio/XltDbGllbnTDqGxlIC8gTGlnbmUgb3JhbmdlIC8gT3VpIDE3XSAgICAgDQoNCioqw4lkaXRlcioqICANCg0KLSDDiWRpdGVyIGxhIHZhcmlhYmxlICrDqXZhY3VhdGlvbiogZGUgZmHDp29uIMOgIGNlIHF1J2lsIG4neSBhaXQgcXVlICoqZGV1eCB2YWxldXJzKiogcG9zc2libGVzOiBPdWkgZXQgTm9uLiAgICANCg0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMi4gTGVzIHJlZ3JvdXBlbWVudHMgKGNsdXN0ZXJpbmcpDQoNCi0gRm9uY3Rpb24gcXVpIHBlcm1ldCBkJ2lkZW50aWZpZXIgZGFucyB1bmUgY29sb25uZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzIHF1aSBwb3VycmFpZW50IGF2b2lyIGxhIG3Dqm1lIHNpZ25pZmljYXRpb24gb3UgcXVpIHBvdXJyYWllbnQgw6p0cmUgcmVncm91cMOpZXMgZGFucyB1bmUgbcOqbWUgY2F0w6lnb3JpZSA9ICJ2YXJpYXRpb25zIHN1ciBsZSBtw6ptZSB0aMOobWUiIMOpdmFsdcOpZXMgZW4gZm9uY3Rpb24gZGUgW2RpZmbDqXJlbnRzIGFsZ29yaXRobWVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvQ2x1c3RlcmluZy1Jbi1EZXB0aCkuIA0KDQotIENoYXF1ZSBzdWdnZXN0aW9uIGRvaXQgw6p0cmUgYXBwcm91dsOpZSBpbmRpdmlkdWVsbGVtZW50IHBvdXIgcXVlIGxlcyBtb2RpZmljYXRpb25zIHMnYXBwbGlxdWVudCAobGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIG5lIHNvbnQgcGFzIG7DqWNlc3NhaXJlbWVudCBwZXJ0aW5lbnRzKS4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGVzICpjbHVzdGVycyogc2Vsb24gZGlmZsOpcmVudGVzIG3DqXRob2RlcyBwbHVzIG91IG1vaW5zIMOpbGFib3LDqWVzICgqUHJvY2hlIHZvaXNpbiogcHJlbmQgcGx1cyBkZSBtw6ltb2lyZSkgcXVpIHBlcm1ldHRlbnQgZGUgcmVncm91cGVyIGxlcyB2YWxldXJzIHNpbWlsYWlyZXMgZXQgcHJvcG9zZW50IGRlcyBtYXRjaHMgcG9zc2libGVzICgqZnV6enkgbWF0Y2hpbmcqKTogcGFyIGV4ZW1wbGUgKmVtcHJlaW50ZSogZXN0IHBsdXMgY29uc2VydmF0ZXVyIChkaXN0aW5ndWUgY2Fzc2UsIGVzcGFjZXMsIG9yZHJlLCByw6lww6l0aXRpb24sIHBvbmN0dWF0aW9uLi4uKSwgKm5ncmFtKiBlc3QgcGx1cyBmbGV4aWJsZSAobcOqbWVzIGNhcmFjdMOocmVzKSwgKk1ldGFwaG9uZTMqIGVzdCBsZSBwbHVzICJsaWLDqXJhbCIgKG3Dqm1lIHByb25vbmNpYXRpb24pLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgdGV4dHVlbGxlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqLiAgDQotIENsaXF1ZXIgc3VyIGBHcm91cGVgIGV0IGV4cGxvcmVyIGxlcyByZWdyb3VwZW1lbnRzIGVuIGZvbmN0aW9uIGRlcyBkaWZmw6lyZW50cyBhbGdvcml0aG1lcy4gIA0KPC9kaXY+DQoNCioqKg0KDQoNCiMjIDcuMy4gTGVzIGZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyANCg0KDQotIEZvbmN0aW9ubmVudCBjb21tZSBkZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcyBzYXVmIHF1J29uIG5lIHBldXQgw6lkaXRlciBlbiBmb25jdGlvbiBkZSBjZXMgcsOpc3VsdGF0cyBjYXIgZWxsZXMgcHLDqXNlbnRlbnQgZGVzIGRvbm7DqWVzIG1vZGlmacOpZXMgZW4gbcOpbW9pcmUuDQoNCi0gT250IMOpdMOpIGTDqXZlbG9wcMOpZXMgZXQgYXV0b21hdGlzw6llcyBhZmluIGQnZXhwbG9yZXIgZGVzIGFzcGVjdHMgcHLDqWNpcyBkZXMgZG9ubsOpZXMgc2FucyBhdm9pciDDoCBsZXMgIHLDqWRpZ2VyIGVuIHN5bnRheGUgR1JFTDogDQoNCiAgLSBgRmFjZXR0ZSBwYXIgbW90YCA6IERpdmlzZSBjaGFxdWUgbW90IChzw6lwYXLDqSBkJ3VuIGVzcGFjZSkgZCd1bmUgY29sb25uZSBldCBsZXMgcHLDqXNlbnRlIGVuIGxpc3RlIGRlIHZhbGV1cnMgZGlzdGluY3RlcyBbdmFsdWUuc3BsaXQoIiAiKV0uDQogIA0KICAtIGBGYWNldHRlIGRvdWJsb25zYDogdmFsZXVycyBib29sw6llbm5lcyBpbmRpcXVhbnQgc2kgbGVzIHZhbGV1cnMgc29udCB1bmlxdWVzIChmYWxzZSkgb3Ugbm9uICh0cnVlKSBbZmFjZXRDb3VudCh2YWx1ZSwgJ3ZhbHVlJywgJ1N5bXB0b21lJykgPiAxXS4gIA0KICANCiAgLSBgRmFjZXR0ZXMgbG9nYXJpdGhtaXF1ZXNgOiBtb2RpZmljYXRpb24gbG9nYXJpdGhtaXF1ZSBkZSB2YWxldXJzIG51bcOpcmlxdWVzIFt2YWx1ZS5sb2coKV0uDQogIA0KICAtIGBGYWNldHRlIGxvbmd1ZXVyIGRlIHRleHRlYDogbGlzdGUgbGUgbm9tYnJlIGRlIGNhcmFjdMOocmVzIGR1IGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgW3ZhbHVlLmxlbmd0aCgpXS4NCiAgDQogIC0gRmFjZXR0ZXMgcGVybWV0dGFudCBkJ2V4cGxvcmVyIGxlcyB2YWxldXJzIGQnYGVycmV1cmAsIGBudWxsZXNgLCBgdmlkZXNgLi4uIFtpc0VtcHR5U3RyaW5nKHZhbHVlKV0NCg0KKioqIA0KDQojIDguICBUcmFuc2Zvcm1hdGlvbnMNCg0KLSBPcGVuUmVmaW5lIHBlcm1ldCBkJ2V4cGxvcmVyIG1haXMgYXVzc2kgZGUgbW9kaWZpZXIgc2VzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgdG91Y2hlciBhdSBjb250ZW51IGRlIGNlbGx1bGVzIG1hbnVlbGxlbWVudC4gIA0KDQotIENvbW1lIHBvdXIgbGVzIGZhY2V0dGVzLCBsZXMgZm9uY3Rpb25zIGRlIHRyYW5zZm9ybWF0aW9uIHBldXZlbnQgc2UgZmFpcmUgZGUgZGV1eCBmYcOnb25zOiAgICANCg0KICAxLiBUcmFuc2Zvcm1hdGlvbnMgYXV0b21hdGlzw6llcyAoYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgKSAqKlsyXSoqOiBmb25jdGlvbnMgcGVybWV0dGFudCBkJ2FwcGxpcXVlciBkZXMgbW9kaWZpY2F0aW9ucyBjb3VyYW50ZXMgc3VyIGxlIGZvcm1hdCBldCBsYSBzdHJ1Y3R1cmUgZGVzIGNlbGx1bGVzL2NvbG9ubmVzLiAgDQogIA0KICAyLiBUcmFuc2Zvcm1hdGlvbnMgbWFudWVsbGVzIGRhbnMgbGEgZmVuw6p0cmUgR1JFTCAqKlsxXSoqIGFmaW4gZCdhbGxlciBiZWF1Y291cCBwbHVzIGxvaW4uICANCiAgDQoNCiFbXShpbWFnZXMvT1IyNC5qcGcpDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpQb3VyIHZvaXIgbGEgc3ludGF4ZSBjb3JyZXNwb25kYW50IMOgIGNoYXF1ZSBmb25jdGlvbiBkZSBgdHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIGFwcGxpcXVlciBsYSBmb25jdGlvbiBzdXIgdW5lIGNvbG9ubmUgcHVpcyBhbGxlciB2b2lyIGwnaGlzdG9yaXF1ZS4gUGFyIGV4ZW1wbGU6IGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVGl0bGVjYXNlKClgLCBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1VwcGVyY2FzZSgpYCwgYHZhbHVlLnRyaW0oKWAuLi4gPC9kaXY+DQoNCioqKiANCg0KDQojIyA4LjEuIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzDQoNCi0gKipEZXV4IG9wdGlvbnM6ICoqICANCiAgMS4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gKipwbHVzaWV1cnMgY29sb25uZXMqKjogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2AgIA0KICAyLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IHN1ciAqKnBsdXNpZXVycyBsaWduZXMqKjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IERpdmlzZXIgbGVzIGNlbGx1bGVzIG11bHRpdmFyacOpZXNgICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjM3LmpwZykgIA0KDQotIExhIHByZW1pw6hyZSBvcHRpb24gZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZS4gDQotIExhIGRldXhpw6htZSBvcHRpb24gYXVyYSB1biBlZmZldCBpbXBvcnRhbnQgc3VyIGxhIHN0cnVjdHVyZSBkZXMgb2JzZXJ2YXRpb25zIHB1aXNxdSdlbGxlIG11bHRpcGxpZXJhIGxlIG5vbWJyZSBkZSBsaWduZXMgcGFyIGNhcyAoY2UgcXVpIG7DqWNlc3NpdGVyYSBkZSBwYXNzZXIgw6AgbGEgdnVlIHBhciBgZW50csOpZXNgKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClRyYW5zZm9ybWVyIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KDQotIENsaXF1ZXIgZW5zdWl0ZSBkaXJlY3RlbWVudCBzdXIgYGVkaXRgIHN1ciB1bmUgY2VsbHVsZSBkZSBsYSBjb2xvbm5lIGRlICpMaWduZSogLT4gcmVtYXJxdWVyIGxhIHByw6lzZW5jZSBkJ3VuIGVzcGFjZSwgc3VwcHJpbWVyIGwnZXNwYWNlIGV0IGZlcm1lci4gDQoNCi0gUmFmcmFpY2hpciBsYSBmYWNldHRlIGV0IG9ic2VydmVyIGwnaW1wYWN0LiANCg0KLSBSZW1hcnF1ZXIgbCdpbXBhY3QgZGUgbCdlc3BhY2UgZGFucyBsYSBmYWNldHRlLiBDZXMgZXNwYWNlcyBwZXV2ZW50IMOqdHJlIHN1cHByaW3DqXMgZ3LDomNlIMOgIGxhIGZvbmN0aW9uOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBTdXBwcmltZXIgbGVzIGVzcGFjZXMgZGUgZMOpYnV0IGV0IGRlIGZpbmAuICAgDQotIFJlbXBsYWNlciBsZXMgY291bGV1cnMgZGUgbGlnbmUgcGFyIGxldXIgbnVtw6lybyBkaXJlY3RlbWVudCBkYW5zIGxhIGZhY2V0dGUuICAgDQo8L2Rpdj4NCg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkRpdmlzZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gY3LDqWFudCBkZXMgY29sb25uZXMgYXZlYyB1bmUgc2V1bGUgdmFsZXVyICAqKg0KDQotIERhbnMgbGEgZmFjZXR0ZSwgcmVtcGxhY2VyIGxlcyAiLSIgcGFyIGRlcyAiLCIuICAgIA0KDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgOg0KICAtIETDqWZpbmlyIGxlIHPDqXBhcmF0ZXVyICIsIiAoY2VsdWktY2kgZGlzcGFyYWl0cmEpLiAgDQogIC0gRMOpY29jaGVyIGxlcyBvcHRpb25zICJEZXZpbmVyIiBldCAiU3VwcHJpbWVyIi4gIA0KLSBMZXMgbm91dmVsbGVzIGNvbG9ubmVzIHJlcHJlbmRyb250IGxlIG5vbSBkZSBsJ29yaWdpbmFsIG51bcOpcm90w6kuIExlcyByZW5vbW1lcjogcHJlbWllcmUsIGRldXhpZW1lLCB0cm9pc2llbWUsIHF1YXRyaWVtZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpEaXZpc2VyIHBhciBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wcyBsYSBjb2xvbm5lIGBOdW3DqXJvIGQnaW5jaWRlbnRgIHBvdXIgZW4gY3LDqWVyIGRldXggbm91dmVsbGVzOiAgDQogIDEuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsZSBwcmVtaWVyIGNhcmFjdMOocmUgaW5kaXF1YW50IGxlIHR5cGUgZCdpbmNpZGVudCwgc29pdCBUICh0cmFpbikgb3UgUyAoc2VydmljZSkuICANCiAgMi4gVW5lIGNvbG9ubmUgY29udGVuYW50IGwnZW5zZW1ibGUgZGVzIGNhcmFjdMOocmVzIG51bcOpcmlxdWVzIGluZGlxdWFudCBsZSBudW3DqXJvIGQnaW5jaWRlbnQuICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVsOpcmlmaWNhdGlvbnMgcHLDqWFsYWJsZXM6KioNCiAgMS4gVsOpcmlmaWVyIHF1J2lsIG4neSBhIHBhcyBkZSBkb3VibG9uIGRhbnMgY2V0dGUgY29sb25uZTogYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGRvdWJsb25gIC0+IFF1ZWwgZXN0IGxlIHByb2Jsw6htZT8gIENsaXF1ZXIgc3VyIGBDaGFuZ2VyYCBldCBhbmFseXNlciBsJ2V4cHJlc3Npb24uICANCiAgMi4gVsOpcmlmaWVyIGxhIGxvbmd1ZXVyIGRlIGNoYXF1ZSBjYXM6ICBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgbG9uZ3VldXIgZHUgdGV4dGVgLiAgICANCg0KKipEaXZpc2VyIGxhIGNvbG9ubmU6KiogIA0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzIHNlbG9uIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzYCA6IDEsIDguICAgIA0KLSBEw6ljb2NoZXIgOiBkZXZpbmVyIGxlIHR5cGUgZGUgY2VsbHVsZSBldCBTdXBwcmltZXIgY2V0dGUgY29sb25uZS4gICAgDQotIFJlbm9tbWVyIGxlcyBjb2xvbm5lcyA6IFR5cGUgZXQgSUQuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIyA4LjIuIEZ1c2lvbm5lciBsZSBjb250ZW51IGRlIHBsdXNpZXVycyBjb2xvbm5lcw0KDQojIyBFeGVyY2ljZSAgIA0KDQpOb3VzIHNvdWhhaXRvbnMgY2FsY3VsZXIgbGEgZHVyw6llIGRlcyBpbmNpZGVudHMgKG7DqWNlc3NpdGUgbCd1dGlsaXNhdGlvbiBkZSBHUkVMKS4gUG91ciBjZSBmYWlyZSBub3VzIGNyw6llcm9ucyBkZXV4IGNvbG9ubmVzIHBvdXIgZW5zdWl0ZSBjYWxjdWxlciBsYSBkaWZmw6lyZW5jZSBlbnRyZSBsZXMgZGV1eDogICAgDQotIFRyYW5zZm9ybWF0aW9uIHNpbXBsZSBhdXRvbWF0aXPDqWU6IENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KLSBUcmFuc2Zvcm1hdGlvbiBhdmFuY8OpZSBHUkVMIChwZXV0IMOqdHJlIHLDqWFsaXPDqWUgZGUgZmHDp29uIGF1dG9tYXRpc8OpZSk6IENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KTG9yc3F1ZSBsJ29uIGZ1c2lvbm5lIGRlcyBjb2xvbm5lcywgaWwgZmF1dCBwb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1IHPDqXBhcmF0ZXVyIGNob2lzaS4gTmUgcGFzIHV0aWxpc2VyIHVuIGNhcmFjdMOocmUgcXVpIHBvdXJyYWl0IGZhaXJlIHBhcnRpZSBkdSBjb250ZW51IChleDogLCkgb3UgcXVpIHNlcnZpcmEgw6AgZGl2aXNlciBsZXMgY29sb25uZXMgKC5jc3YpDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMS4gKipGb25jdGlvbiBhdXRvbWF0aXPDqWUqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiBgw4lkaXRlciBsYSBjb2xvbm5lYCAtPiBgSm9pbmRyZSBsZXMgY29sb25uZXNgLiAgICANCi0gSm9pbmRyZSBkZXMgY29sb25uZXMgLT4gQ29jaGVyIGxlcyBjb2xvbm5lcyB2b3VsdWVzIGV0IGxlcyB0cmllciBzZWxvbiBsJ29yZHJlIHZvdWx1IGRhbnMgbGEgbm91dmVsbGUgdmFsZXVyLiAgDQotIFPDqXBhcmF0ZXVyIGVudHJlIGxlIGNvbnRlbnUgZGUgY2hhcXVlIGNvbG9ubmU6ICItIi4gICAgDQotIMOJY3JpcmUgbGUgcsOpc3VsdGF0IGRhbnMgdW5lIG5vdXZlbGxlIGNvbG9ubmUgbm9tbcOpZTogKkRhdGUqLiAgICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoyLiAqKkZlbsOqdHJlIEdSRUwqKiAtPiBGdXNpb25uZXIgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIHJlcHJpc2UqDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQW5uw6llIGNpdmlsZSAtPiDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVsOpcmlmaWVyIGxhIHRyYW5zZm9ybWF0aW9uIGF2ZWMgdW5lIGZhY2V0dGUgYHZhbHVlLnR5cGUoKWAuICANCg0KLSBSZWNvbW1lbmNlciBsYSBqb2ludHVyZSBwb3VyIGNyw6llciB1bmUgY29sb25uZSBhdmVjIGxhIGRhdGUtaGV1cmUgZGUgZmluIGRlIGwnaW5jaWRlbnQNCmBjZWxsc1siQW5uw6llIGNpdmlsZSJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIk1vaXMgY2FsZW5kcmllciJdLnZhbHVlICsgIi0iICsgIjAiICsgY2VsbHNbIkpvdXIgZHUgbW9pcyJdLnZhbHVlICsgIiAiICsgIGNlbGxzWyJIZXVyZSBkZSBsJ2luY2lkZW50Il0udmFsdWVgLiAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNhbGN1bGVyIGxhIGR1csOpZSBkZSBsJ2luY2lkZW50ICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSBDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgdmlkZTogIA0KYMOJZGl0ZXIgbGEgY29sb25uZSA+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZSBgIC0+IENob2lzaXIgdW4gbm91dmVhdSBub20gZXQgbGUgY29udGVudTogIiIuICANCg0KLSBQb3VyIGNhbGN1bGVyIHVuZSBkaWZmw6lyZW5jZSBlbnRyZSBkYXRlOiBgZGlmZihkYXRlMSwgZGF0ZTIsICJyZXN1bHRzIGZvcm1hdCIpYC4gICAgDQoNCmBkaWZmKGNlbGxzWydkYXRlMiddLnZhbHVlLGNlbGxzWydkYXRlMSddLnZhbHVlLCAnbWludXRlcycpYC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyA5LiBMZSBsYW5nYWdlIEdSRUwgDQoNCg0KLSAqR29vZ2xlIFJlZmluZSBFeHByZXNzaW9uIExhbmd1YWdlKiANCi0gTGFuZ2FnZSBzaW1pbGFpcmUgw6AgamF2YXNjcmlwdCBldCBmb3JtdWxlcyBleGNlbC4gICAgDQotIFBlcm1ldCBsYSByw6lkYWN0aW9uIGQnZXhwcmVzc2lvbnMgdmlzYW50IMOgIG1hbmlwdWxlci90cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lLiAgDQooVm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWwpIHBvdXIgcGx1cyBkZSBkw6l0YWlscykgIA0KLSBMYW5nYWdlIGNvbXBvc8OpIGRlIFtmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbGZ1bmN0aW9ucykgZXQgZCdbb2JqZXRzXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zI3ZhcmlhYmxlcykuDQoNCjwvYnI+DQoNCiMjICA5LjEuIEdSRUwgLSBQcmluY2lwZXMgZGUgYmFzZSANCg0KIyMjIyBVdGlsaXNlIHVuZSBzeW50YXhlIHBhcnRpY3VsacOocmUgcG91ciBjaWJsZXIgbGVzIG9iamV0cyAodmFyaWFibGVzKTogIA0KLSBDb250ZW51IGRlIGNvbG9ubmUgYWN0dWVsbGU6IGB2YWx1ZWAuICAgICANCi0gQ29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lOiBgY2VsbHNbJ25vbS1jb2xvbm5lJ10udmFsdWVgLiAgICANCi0gQ29udGVudSB0ZXh0dWVsOiAiZ3VpbGxlbWV0IHNpbXBsZSBvdSBkb3VibGUiLiAgICANCg0KPC9icj4NCg0KIyMjIyBEZXV4IGZvcm1hdHMgZGUgbm90YXRpb246ICANCi0gSW1icmlxdcOpZTogKHRyaW0odG9Mb3dlcmNhc2UodmFsdWUpKS4gICAgDQotICoqU8OpcXVlbnRpZWxsZSoqOiB2YWx1ZS50b0xvd2VyY2FzZSgpLnRyaW0oKSAocGx1cyBmYWNpbGUgw6AgbGlyZSkuICAgIA0KDQo8L2JyPg0KDQojIyMjIERpZmbDqXJlbnRzIHR5cGVzIGRlIGZvbmN0aW9uczogIA0KLSBMZXMgZm9uY3Rpb25zIGV0IGxldXIgY29tcG9ydGVtZW50IGTDqXBlbmRyb250IGR1IHR5cGUgZGUgZG9ubsOpZXMgbWFuaXB1bMOpZXMuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbGZ1bmN0aW9ucyNzbGljZWEtbi1mcm9tLW4tdG8tb3B0aW9uYWwpIHBlcm1ldHRlbnQgZGUgdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBlbiBgYXJyYXlzYCAobGlzdGUgZCfDqWzDqW1lbnRzKSBldCBkZSBsZXMgbWFuaXB1bGVyLiAgDQotIFtDZXJ0YWluZXMgZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zI3JlZ3VsYXItZXhwcmVzc2lvbnMpIHBlcm1ldHRlbnQgZCd1dGlsaXNlciBsZXMgW2V4cHJlc3Npb25zIHLDqWd1bGnDqHJlc10oI2V4cHJlc3Npb24pLiAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZCdvcMOpcmF0ZXVyczogIA0KU2Vsb24gbGUgZm9ybWF0LCBkaWZmw6lyZW50cyB0eXBlcyBkJyoqb3DDqXJhdGV1cnMqKiBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBlbnRyZSBsZXMgdmFsZXVyczogIA0KCS0gT3DDqXJhdGV1cnMgYXJpdGhtw6l0aXF1ZXM6ICssIC0sICosIC8gIA0KCS0gT3DDqXJhdGV1cnMgYm9vbMOpZW5zOiA9PSwgPiwgPCAgDQogIA0KKipQYXIgZXhlbXBsZToqKg0KDQotIExlICIrIiBlbnRyZSBkZXV4IGNvbnRlbnVzIG51bcOpcmlxdWVzID0gc29tbWUNCg0KIVtdKGltYWdlcy9PUjMwLmpwZykNCg0KLSBMZSAiKyIgYXZlYyB1biBjb250ZW51IHRleHR1ZWwgPSBjb25jYXTDqW5hdGlvbg0KDQohW10oaW1hZ2VzL09SMzEuanBnKQ0KDQo8L2JyPg0KDQoqKiogIA0KDQojIyAgOS4yLiBHUkVMIC0gTCdpbmRleGF0aW9uLCBsYSBzw6lsZWN0aW9uIGV0IGxhIG1hbmlwdWxhdGlvbiBkJ8OpbMOpbWVudHM6ICANCg0KLSBDaGFxdWUgY2FyYWN0w6hyZSBjb21wb3NhbnQgbGEgdmFsZXVyIGQndW5lIGNlbGx1bGUgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KS4NCi0gQ2hhcXVlIMOpbMOpbWVudCBkJ3VuICphcnJheSogZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLiAgDQotIEwnb3DDqXJhdGV1ciBgWyBdYCBwZXJtZXQgZGUgY2libGVyL3PDqWxlY3Rpb25uZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgb3UgZGVzIHNvdXMtw6lsw6ltZW50cyBzcMOpY2lmaXF1ZXMuIA0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNwbGl0KCkgICANCg0KPiBgdmFsdWVbMCw4XWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gICANCj4gYHZhbHVlLnNwbGl0KCIoIilbMV1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCj4gYHZhbHVlLnNwbGl0KCIoIilbMV0uc3BsaXQoIikiKVswXWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID9eW01vbnRyw6lhbCAvIFF1w6liZWMpIC8gUXXDqWJlY10gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZSAtIEZvbmN0aW9uIHJlcGxhY2UoKSAgDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCmBJU0JOOiA5NzgtMi0xMy0wODI5MzAtMGANCg0KQ29uc2VydmVyIHNldWxlbWVudCBsZSBjaGlmZnJlIGRlIGwnSVNCTiBzYW5zIGxlcyB0cmFpdHMgZCd1bmlvbj9eW3ZhbHVlWzUsMjRdLnJlcGxhY2UoIi0iLCAiIildDQoNCkluZGljZXMgOiAgDQoNCi0gRGV1eCBmYcOnb25zIGRlIGZhaXJlOiBgdmFsdWVgIE9VIGB2YWx1ZS5zcGxpdCgpYA0KLSBgcmVwbGFjZSgpYCAoaWwgZmF1dCByZW1wbGFjZXIgInF1ZWxxdWUgY2hvc2UiLCAicGFyIGxlIHZpZGUiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiBzbGljZSgpICANCg0KYE1hcnRpbm9sbGksIFBhc2NhbDsgR2FicmllbGxpLCBOaW5vOyBGb3J0aWVyLCBDYXRoZXJpbmU7IEJlbGxlbWFyZSwgUGFzY2FsZWANCg0KIVtdKGltYWdlcy9PUjI1LmpwZykNCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KCI7ICIpLnNsaWNlKDEpLmpvaW4oIlxuIilgIA0KDQohW10oaW1hZ2VzL09SMzkuanBnKQ0KDQotIGBzcGxpdCgpYDogZGl2aXNlciBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsNCi0gYHNsaWNlKClgIDogY29uc2VydmVyIGxlcyDDqWzDqW1lbnRzIMOgIHBhcnRpciBkZSBsJ8OpbMOpbWVudCAxIGRvbmMgc3VwcHJpbWUgbGUgMC4gDQotIGBqb2luKClgOiBqb2luZHJlIGF2ZWMgbGUgc8OpcGFyYXRldXIgOw0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZSAtIEZvbmN0aW9uIHNvcnQoKSAgDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCk1ldHRyZSBsZXMgbm9tcyBlbiBvcmRyZSBhbHBoYWLDqXRpcXVlIGV0IGxlcyBqb2luZHJlIGF2ZWMgdW5lIHZpcmd1bGUuXlt2YWx1ZS5zcGxpdCgiOyAiKS5zb3J0KCkuam9pbigiLCAiKV0NCg0KSW5kaWNlczogIA0KDQotIGBzcGxpdCgpYDogZGl2aXNlciBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyICANCg0KLSBgc29ydCgpYDogdHJpZXIgbGVzIMOpbMOpbWVudHMgKHJlc3RlIHZpZGUpDQoNCi0gYGpvaW4oKWA6IGpvaW5kcmUgYXZlYyBsZSBzw6lwYXJhdGV1ciAgDQoNCg0KPC9kaXY+DQoNCg0KPC9icj4NCg0KIyMjIEV4ZW1wbGUgLSBGb25jdGlvbiByZXZlcnNlKCkgIA0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIilbMV0uc3BsaXQoIiwgIikucmV2ZXJzZSgpLmpvaW4oIiAiKSArICIgZXN0IGxlIG1laWxsZXVyImAgDQoNCiFbXShpbWFnZXMvT1IzOC5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2UgbGEgY2VsbHVsZSBlbiDDqWzDqW1lbnRzIGRpc3RpbmN0cyBzdXIgbGEgYmFzZSBkdSBzw6lwYXJhdGV1ciA7IGV0IHJldGllbnQgbGUgZGV1eGnDqG1lIMOpbMOpbWVudA0KLSBgc3BsaXQoKWA6IGRpdmlzZSBjZXQgw6lsw6ltZW50IHN1ciBsZSBzw6lwYXJhdGV1ciAsDQotIGByZXZlcnNlKClgOiBpbnZlcnNlIGwnb3JkcmUgZGVzIGRldXggw6lsw6ltZW50cw0KLSBgam9pbigpYDogcmF0dGFjaGUgbGVzIGRldXggw6lsw6ltZW50cyBkaXZpc8OpIGF2ZWMgdW4gZXNwYWNlDQoNCjwvYnI+DQoNCioqKg0KDQojIyA5LjMuIENyw6llciBkZXMgZmFjZXR0ZXMgYXZlYyBHUkVMDQoNCiMjIEV4ZXJjaWNlcw0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBsaXN0ZXIgbGVzIGNhcyBzZWxvbiBsJypoZXVyZSBkZSBsJ2luY2lkZW50KiBzZXVsZW1lbnQsIHNhbnMgbGVzIG1pbnV0ZXMgKDIgcHJlbWllcnMgY2FyYWN0w6hyZXMpLiBDb21tZW50IGZhaXJlIGFmZmljaGVyIGxlcyBtaW51dGVzIHNldWxlbWVudD9eW3ZhbHVlWzMsNV0gb3UgdmFsdWUuc3Vic3RyaW5nKDMpXSANCg0KYHZhbHVlWzAsMl1gICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSogcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgY29tbWVuY2UgcGFyICJDw7R0ZSIgIA0KDQpgdmFsdWUuc3RhcnRzV2l0aCjigJxDw7R0ZeKAnSlgICAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGRhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGVzdCBsYSBtw6ptZSBxdWUgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBzZWNvbmRhaXJlKg0KDQpgdmFsdWUgPT0gY2VsbHNbIkNhdXNlIHNlY29uZGFpcmUiXS52YWx1ZWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDkuNC4gUmVjaGVyY2hlci9yZW1wbGFjZXIgdW4gY2FyYWN0w6hyZSBkYW5zIHRvdXRlcyBsZXMgY29sb25uZXMgYXZlYyBHUkVMDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpSZW1wbGFjZXIgbGVzIHZhbGV1cnMgIiMiIGRhbnMgdG91dGUgbGEgYmFzZSBkZSBkb25uw6llcyBwYXIgImF1Y3VuIioqICAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFF1ZWwgcHJvYmzDqG1lIGNlIHJlbXBsYWNlbWVudCBwZXV0LWlsIHByb3ZvcXVlcj8gICAgDQotIEV4cGxvcmVyIGwnaW1wYWN0IGRlcyB0cm9pcyBleHByZXNzaW9ucyBkZSByZW1wbGFjZW1lbnQgc3VpdmFudGVzOiAgDQoNCjEuIGB2YWx1ZS5yZXBsYWNlKCIjIiwgImF1Y3VuIilgICAgDQoocmVtcGxhY2UgbGUgY2FyYWN0w6hyZSAjOiBhdWN1biBldCBhdWN1bk4vRCApICAgICANCiANCjIuIGBpZih2YWx1ZS5jb250YWlucygiIyIpLCJhdWN1biIsIHZhbHVlKWAgICANCihyZW1wbGFjZSBsZXMgY2VsbHVsZXMgZGVzICMgZXQgI05EIHBhciBhdWN1bikgIA0KDQozLiBgaWYodmFsdWU9PSgiIyIpLCJhdWN1biIsIHZhbHVlKWAgICAgIA0KKHJlbXBsYWNlIHNldWxlbWVudCBsZXMgY2VsbHVsZXMgIywgcGFzIGxlcyAjTkQgcGFyIGF1Y3VuKSANCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCioqKg0KDQojIyA5LjUuIENyw6llciBldCBjb3BpZXIgZGVzIGNvbG9ubmVzDQoNCjwvYnI+DQoNCmDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYA0KDQohW10oaW1hZ2VzL09SMzIuanBnKQ0KDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgc3VyIGxhIGJhc2UgZGUgbGEgY29sb25uZSAqSm91ciBkZSBsYSBzZW1haW5lKiBpbmRpcXVhbnQgc2kgbGUgam91ciBlc3QgZW4gc2VtYWluZSBvdSBmaW4gZGUgc2VtYWluZS4NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmBpZih2YWx1ZSA+IDUsImZpbiBkZSBzZW1haW5lIiwic2VtYWluZSIpYA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDcsOpZXIgdW5lIGNvbG9ubmUgw6AgcGFydGlyIGRlIGxhIGNvbG9ubmUgKmhldXJlIGRlIGwnaW5jaWRlbnQqIGVuIG5lIGNvbnNlcnZhbnQgcXVlIGwnaGV1cmUsIHNhbnMgbGVzIG1pbnV0ZXMsIGV0IHJham91dGVyIGxhIGxldHRyZSBoIHBvdXIgZG9ubmVyIHBhciBleGVtcGxlIGNlY2k6IDE1OjEyICAtPiAgMTVoLiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgdmFsdWUuc3BsaXQoJzonKVswXSArICJoImAuICANCg0KT3UNCg0KYHZhbHVlLnNwbGl0QnlMZW5ndGhzKDIpWzBdICsgImgiYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCg0KIyAxMC4gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyB7I2V4cHJlc3Npb259DQoNCiMjIDEwLjEuIENhcmFjdMOpcmlzdGlxdWVzICANCg0KLSBMJ3VzYWdlIGRlIEdSRUwgcGVybWV0IGRlcyBtYW5pcHVsYXRpb25zIGRlIGRvbm7DqWVzIGJlYXVjb3VwIHBsdXMgYXZhbmPDqWVzIHF1ZSBsJ3V0aWxpc2F0aW9uIGRlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgbWFpcyBPcGVuUmVmaW5lIHBlcm1ldCBlbiBwbHVzIGRlIGNvbWJpbmVyIGwndXRpbGlzYXRpb24gZGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBhdmVjIEdSRUwgcG91ciBlbiBhdWdtZW50ZXIgbGEgcHVpc3NhbmNlLiANCi0gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXJtZXR0ZW50LCDDoCBwYXJ0aXIgZCd1bmUgc3ludGF4ZSBzcMOpY2lmaXF1ZSwgZCdpZGVudGlmaWVyIGRlcyBwYXR0ZXJucyBkYW5zIHVuIGNvbnRlbnUuICANCi0gTG9yc3F1J3V0aWxpc8OpZXMgYXZlYyBHUkVMLCBjZXMgZXhwcmVzc2lvbnMgcGVybWV0dGVudCBkb25jIGQnaWRlbnRpZmllciBldCBkJ2V4dHJhaXJlIGRlcyBjb250ZW51cyB0csOocyBwcsOpY2lzIHBvdXIgZW5zdWl0ZSBsZXMgbWFuaXB1bGVyIHNlbG9uIGxlcyBiZXNvaW5zLiAgDQotIEVsbGVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyDDoCBkaWZmw6lyZW50cyBlbmRyb2l0cyBkYW5zIE9wZW5SZWZpbmUgZXQgZG9pdmVudCB0b3Vqb3VycyDDqnRyZSBlbnRvdXLDqWVzIGRlIGAvIC9gOiBmaWx0cmVzLCBmYWNldHRlcywgZmVuw6p0cmUgR1JFTC4NCi0gQ2VydGFpbmVzIGV4cHJlc3Npb25zIHBldXZlbnQgcyfDqWNyaXJlIGVuIEdSRUwgYXZlYyBvdSBzYW5zIHJlZ2V4LiAgDQotIExlcyBmb25jdGlvbnMgR1JFTCBxdWkgYWNjZXB0ZW50IGxlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXM6IGByZXBsYWNlYCwgYG1hdGNoYCwgYHBhcnRpdGlvbmAsIGBycGFydGl0aW9uYCwgYHNwbGl0YC4NCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjMzLmpwZykNCg0KDQotIE1haXMgY2VydGFpbmVzIGZvbmN0aW9ucyAoY29tbWUgYG1hdGNoYCkgbidhY2NlcHRlbnQgcXVlIGNlcyBleHByZXNzaW9ucy4gIA0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpZXMgYXZlYyBwbHVzaWV1cnMgYXV0cmVzIGxhbmdhZ2VzIGRvbnQgW1JdKGh0dHBzOi8vdG93YXJkc2RhdGFzY2llbmNlLmNvbS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tcmVndWxhci1leHByZXNzaW9ucy13aXRoLXItZGY1ZTg5N2NhNDMyKSBldCBbUHl0aG9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3JlZ2V4Lmh0bWwpIGV0IGRhbnMgZGVzIGxvZ2ljaWVscyBxdWkgbidvbnQgcmllbiDDoCB2b2lyIGF2ZWMgbGVzIHN0YXRpc3RpcXVlcyBjb21tZSBbT3Blbk9mZmljZV0oaHR0cHM6Ly93aWtpLm9wZW5vZmZpY2Uub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9Ib3dfVG9zL1JlZ3VsYXJfRXhwcmVzc2lvbnNfaW5fV3JpdGVyKS4NCg0KUG91ciBlbiBzYXZvaXIgcGx1czogIA0KLSBodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvVW5kZXJzdGFuZGluZy1SZWd1bGFyLUV4cHJlc3Npb25zICANCi0gaHR0cHM6Ly9yZWdleDEwMS5jb20vICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIyAxMC4yLiBMYSBzeW50YXhlIGRlIGJhc2U6ICAgDQoNCkxhIHN5bnRheGUgZXN0IGNvbXBvc8OpZSBkJ8OpbMOpbWVudHMgcGVybWV0dGFudCBkZSAgY2libGVyIGRlcyBjYXJhY3TDqHJlcyBwcsOpY2lzIGV0IGRlIGTDqWZpbmlyIGxldXIgZW1wbGFjZW1lbnQgZXQgbGV1ciBvY2N1cnJlbmNlLg0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IFRZUEVTIERFIENBUkFDVMOIUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFVQU5USUZJQ0FURVVSUyBFVCBFTVBMQUNFTUVOVCAgICAgICAgICAgICAgICAgfCANCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsNCnwgYC5gIDogTuKAmWltcG9ydGUgcXVvaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGArYCA6IDEgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXHdgIDogbidpbXBvcnRlIHF1ZWwgbW90LCBjaGlmZnJlIG91IF8gIChgXFdgIDogc2F1ZikgICAgIHwgYCpgIDogMCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxkYCA6IENoaWZmcmVzICAgICAgKGBcRGAgOiBzYXVmKSAgICAgICAgICAgICAgICAgICAgfCBgP2AgOiAwIG91IHVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcc2AgOiBFc3BhY2VzICAgICAgICAgKGBcU2AgOiBzYXVmKSAgICAgICAgICAgICAgICAgIHwgYHsyfWAgOiBOb21icmUgZXhhY3QgKGljaSAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFtBLVpdYCA6IE1hanVzY3VsZXMgICAgIChgW15BLVpdYCA6IHNhdWYpICAgICAgICAgICAgfCBgeyw0fWAgOiBFbnRyZSAwIGV0IDQgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYS16XWAgOiBNaW51c2N1bGVzICAgICAgKGBbXmEtel1gIDogc2F1ZikgICAgICAgICAgIHwgYHs0LH1gIDogNCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbYWJkO11gIDogbGVzIGxldHRyZXMgYSwgYiwgYywgZCBldCBsZSA7ICAgICAgICAgICAgIHwgYHsxOzN9YCA6IDEgT1UgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFiY2RgIDogdW5lIG91IHBsdXNpZXVycyBsZXR0cmVzIGV4YWN0ZXMgICAgICAgICAgICAgfCBgezEsM31gIDogRW50cmUgMSBldCAzIGluY2wuICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgfGAgOiBPdSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgXmAgOiBEw6lidXQgZCd1bmUgbGlnbmUgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgKClgIDogR3JvdXBlciB1biBjb250ZW51IGV0IGxlIGdhcmRlciBlbiBtw6ltb2lyZSAgICAgIHwgYCRgIDogRmluIGQndW5lIGxpZ25lIG91IHJhcHBlbGVyIHVuIGdyb3VwZSAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgIGBcYCA6IENoZXJjaGVyIHVuIGNhcmFjdMOocmUgc3DDqWNpYWwgbGl0dMOpcmFsZW1lbnQgICAgfCBTYW5zIHF1YW50aWZpY2F0ZXVyLCBsJ29jY3VycmVuY2UgZXN0IGRlIDEgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCiMjIyMjIFBhciBleGVtcGxlLCBqZSBjaGVyY2hlIHVuIGNvbnRlbnUgY29ycmVzcG9uZGFudCBhdSBtb3RpZjogIA0KDQpgXlxkezR9ICtbQS1aXVwuYCAgICANCiAgIA0KLSBkw6lidXRlIHBhciA0IGNoaWZmcmVzICAgDQotIHN1aXZpIGQndW4gZXNwYWNlIG91IHBsdXMgICANCi0gc3VpdmkgZCd1bmUgbGV0dHJlIG1hanVzY3VsZSBhdmVjIHVuIHBvaW50ICAgDQoNCjwvYnI+DQoNCiMjIyMjIEF1dHJlcyBleGVtcGxlcyBhdmVjIGxhIHN5bnRheGUgT3BlblJlZmluZToNCg0KLSBgdmFsdWUuZmluZCgvW0NjXWFyb2xpbmUvKWA6IENhcm9saW5lIGV0IGNhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhK3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY2FhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Eqcm9saW5lLylgOiBjYXJvbGluZSwgY2FhYXJvbGluZSBldCBjcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhP3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY3JvbGluZSBtYWlzIHBhcyBjYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhezR9cm9saW5lLylgOiBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9eQ2Fyb2xcYi8pYDogQ2Fyb2wgZW4gZMOpYnV0IGQnZXhwcmVzc2lvbiwgbWFpcyBwYXMgQ2Fyb2xpbmUgKFxiID0gImJvdW5kYXJ5IikNCg0KLSBgdmFsdWUuZmluZCgvY1thLXpdezZ9ZS8pYDogYyArIDYgbWludXNjdWxlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1thLXpBLVowLTldezZ9ZS8pYDogQyArIDYgbWludXNjdWxlcywgbWFqdXNjdWxlcyBvdSBjaGlmZnJlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1x3ezZ9ZS8pYDogQyArIFtBLVphLXowLTlfXSArIGUNCg0KLSBgdmFsdWUuZmluZCgvQy57Nn1lLylgOiBDICsgNiBuJ2ltcG9ydGUgcXVvaSArIGUNCg0KDQoqKioNCg0KIyMgRXhlcmNpY2UNCg0KIyMjIE1hbmlwdWxlciBsZXMgw6lsw6ltZW50cyBkZSByw6lmw6lyZW5jZXMgYmlibGlvZ3JhcGhpcXVlcw0KDQohW10oaW1hZ2VzL09SMzYuanBnKQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KMS4gQWxsZXIgc3VyIGxlIFtndWlkZSBBUEFdKGh0dHBzOi8vYmliLnVtb250cmVhbC5jYS9jaXRlci9zdHlsZXMtYmlibGlvZ3JhcGhpcXVlcy9hcGE/dGFiPTMyODEpLiAgICAgDQoyLiBDb3BpZXIgbGVzIGRldXggcsOpZsOpcmVuY2VzIGRlIExlbWFpcmUgZXQgTGVib3ZpY2kgYXUgcG9pbnQgMi4xLiAgICAgIA0KMy4gRGFucyBPcGVuUmVmaW5lLCBjbGlxdWVyIHN1ciBsZSBwZXRpdCBsb2dvIGVuIGhhdXQgw6AgZ2F1Y2hlIC0+IGBDcsOpZXIgdW4gcHJvamV0YCAtPiBgUHJlc3NlLXBhcGllcmA6IENvbGxlciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZW4gIGFqb3V0YW50IHVuIHPDqXBhcmF0ZXVyICoqIjsiKiogw6AgbGEgZmluIGRlIGxhIHByZW1pw6hyZSAtPiBTdWl2YW50LiAgICAgICANCg0KNC4gTW9kaWZpZXIgbGVzIG9wdGlvbnM6IA0KICAtIExlcyBjb2xvbm5lcyBzb250IHPDqXBhcsOpZXMgcGFyIC0gcGVyc29ubmFsaXPDqSAiOyIuICANCiAgLSBEw6ljb2NoZXIgIkFuYWx5c2VyIGxhIG91IGxlcwkxIGxpZ25lKHMpIHN1aXZhbnRlKHMpIGNvbW1lIGRlcyBlbnTDqnRlcyBkZSBjb2xvbm5lcyIuICANCjUuIENyw6llciBwcm9qZXQuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCjYuIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYCAgDQoNCjcuIEV4YW1pbmVyIGwnaW1wYWN0IGRlIGNlcyBkZXV4IGNvbW1hbmRlcyAqKkdSRUwgKyByZWdleCoqLiBRdSdlc3QtY2UgcXVpIHNlIHBhc3NlPw0KDQotIMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyOiANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pYCAgDQoNCj4gYHZhbHVlLmZpbmQoL1woLio/XCkvKS5qb2luKCcsJykucmVwbGFjZSgiKCIsIiAiKS5yZXBsYWNlKCIpIiwgIiIpYCAgDQoNCi0+IEF0dGVudGlvbiBhdXggW3F1YW50aWZpY2F0ZXVycyAiZ291cm1hbmRzIl0oaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L3N0YW5kYXJkL2Jhc2UtdHlwZXMvcXVhbnRpZmllcnMtaW4tcmVndWxhci1leHByZXNzaW9ucyNncmVlZHktYW5kLWxhenktcXVhbnRpZmllcnMpICh2cyBwYXJlc3NldXgpLg0KDQo8L2JyPg0KDQrDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lOiAgDQoNCiAgLSBDcsOpZXIgbGEgY29sb25uZSBBdXRldXIgOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMF1gIG91IGB2YWx1ZS5zcGxpdCgiKCIpWzBdYCAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIEFubsOpZTogYHZhbHVlLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiKSIpWzBdYCAgIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLio/KFxkezR9KS4qPy8pWzBdYC4gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgdGl0cmU6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIoIilbMF1gLiAgICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0ZXVyOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKS4iKVsyXWAuICAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSDDqWRpdGlvbjogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVsyXS5wYXJ0aXRpb24oIsOpZCIpWzBdYCBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qKFxkKykuIMOpZC4qLylbMF1gLiAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgdm9sdW1lOiBgdmFsdWUucGFydGl0aW9uKCJ2b2wuIilbMl0ucGFydGl0aW9uKCIpIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLip2b2wuIChcZCspLiovKVswXWAuICANCkF2ZWMgcmVnZXg6ICANCi0gU3VwcHJpbWVyIGxlcyBsZXR0cmVzIGR1IHByw6lub206IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKS8sICIgIilgLiAgDQotIFN1cHByaW1lciB0b3V0IGxlIGNvbnRlbnUgc2F1ZiBsZXMgbm9tcyBkZSBmYW1pbGxlOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccyl8KGV0KXwoLCkvLCAiICIpYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIDExLiBUcmFuc3Bvc2l0aW9uDQoNCiMjIEV4ZXJjaWNlOiB0cmFuc3Bvc2VyIHVuIHRhYmxlYXUgZCdpbmRpY2F0ZXVycyBkdSBXREkNCjwvYnI+DQoNCioqRmljaGllciBvcmlnaW5hbCB0w6lsw6ljaGFyZ8OpIGRlIGxhIFtCYW5xdWUgbW9uZGlhbGVdKGh0dHBzOi8vZGF0YWJhbmsuYmFucXVlbW9uZGlhbGUub3JnL3JlcG9ydHMuYXNweD9zb3VyY2U9d29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycykgZW4gZm9ybWF0IC5jc3YgY29tcG9zw6kgZGUgNSBwYXlzIGV0IDQgaW5kaWNhdGV1cnMgw6AgbCdob3Jpem9udGFsZSBldCAzIGFubsOpZXMgw6AgbGEgdmVydGljYWxlKiogIA0KDQotIFBvdXIgb3V2cmlyIGxlIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpXRElfRGF0YV9FeHRyYWN0LmNzdiogLT4gQ2xpcXVlciBzdXIgbGUgYm91dG9uIFJBVyAtPiBjb3BpZXIgbCdhZHJlc3NlIGR1IG5hdmlnYXRldXIuDQogIC0gRGFucyBPcGVuUmVmaW5lLCBDcsOpZXIgdW4gcHJvamV0IC0+IEFkcmVzc2VzIHdlYiAoVVJMcykgLT4gY29sbGVyIGxlIGxpZW4uDQogIA0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UxLmpwZykNCg0KPC9icj4NCg0KKioxLiBUcmFuc3Bvc2VyIGxlcyBkYXRlcyDDoCBsJ2hvcml6b250YWxlIChmb3JtYXQgKmxvbmcqKSoqICANCg0KPC9icj4NCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zcG9zZXIgLT4gVHJhbnNwb3NlciBsZXMgY2VsbHVsZXMgZGUgcGx1c2lldXJzIGNvbG9ubmVzIGVuIGxpZ25lcy4uLioNCg0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMi5qcGcpDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UzLmpwZykNCg0KPC9icj4NCg0KKioyLiBSZW1wbGlyIGF1dG9tYXRpcXVlbWVudCBsZXMgY2VsbHVsZXMgdmlkZXMgZGVzIGRldXggY29sb25uZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFJlY29waWVyIGxlcyB2YWxldXJzIGRhbnMgbGVzIGNlbGx1bGVzIHZpZGVzIGNvbnPDqWN1dGl2ZXMqDQoNCjwvYnI+DQoNCioqMy4gVHJhbnNwb3NlciBsZXMgaW5kaWNhdGV1cnMgZW4gdmFyaWFibGVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCipUcmFuc3Bvc2VyIC0+IENvbnZlcnRpciBlbiBsaXN0ZSBsZXMgY29sb25uZXMgZGUgY2zDqS92YWxldXIuLi4qDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNC5qcGcpDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlNS5qcGcpDQoNCjwvYnI+DQoNCg0KKioqDQoNCiMgMTIuIEV4cG9ydGVyIHVuIGZpY2hpZXIgZXQgZmVybWVyIE9wZW5SZWZpbmUNCg0KLSBGb25jdGlvbiDDoCB1dGlsaXNlciBsb3JzcXVlIGwnb24gZXN0IHByw6p0IMOgIGV4cG9ydGVyIHNvbiBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgcG91ciB0cmF2YWlsbGVyIGRhbnMgdW4gYXV0cmUgbG9naWNpZWwgKC5jc3YsIC54bHMuLi4pDQotIE9SIHNhdXZlZ2FyZGUgYXV0b21hdGlxdWVtZW50IGxlcyBmaWNoaWVycyBzb3VzIGZvcm1lIGQnYXJjaGl2ZXMgZGUgcHJvamV0IGRhbnMgdW4gZG9zc2llciBzdXIgbGUgcG9zdGUgZGUgdHJhdmFpbCBhdXhxdWVsbGVzIG9uIHBldXQgYWNjw6lkZXIgZW4gY2xpcXVhbnQgc3VyIGBPdXZyaXIgdW4gcHJvamV0YCBzdXIgbGEgcGFnZSBwcmluY2lwYWxlLg0KLSBMJ291dGlsIGBFeHBvcnRldXIgdGFidWxhaXJlIHBlcnNvbm5hbGlzw6lgIGVzdCB0csOocyB1dGlsZSBwb3VyIHBhcmFtw6l0cmVyIGwnZXhwb3J0YXRpb24gKHPDqWxlY3Rpb24gZGUgY29sb25uZXMsIGZvcm1hdCBkZSBkYXRlcywgZm9ybWF0IGRlIGZpY2hpZXIuLi4pDQotIEZlcm1lciBsJ29uZ2xldCBuZSBmZXJtZSBwYXMgbGUgc2VydmV1ciBxdWkgY29udGludWVyYSDDoCByb3VsZXIgZW4gYXJyacOocmUtcGxhbi4NCi0gQWxsZXIgw6AgbGEgZmVuw6p0cmUgbm9pcmUgZHUgdGVybWluYWwgZXQgdXRpbGlzZXIgbGVzIHRvdWNoZXMgQ1RSTCArIEMganVzcXUnw6AgY2UgcXUnZWxsZSBzZSBmZXJtZSBkJ2VsbGUtbcOqbWUgKGlsIGVzdCBwYXJmb2lzIG7DqWNlc3NhaXJlIGRlIHLDqXDDqXRlciDDoCBwbHVzIGQndW5lIHJlcHJpc2UpLiBMZSBmaWNoaWVyIHNlcmEgZW5yZWdpc3Ryw6kgdW5lIGRlcm5pw6hyZSBmb2lzIGV0IGxlIGxvZ2ljaWVsIHNlcmEgIG1haW50ZW5hbnQgYmVsIGV0IGJpZW4gZmVybcOpLg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDEzLiBRdWVscXVlcyByZWNldHRlcyBwb3VyIGZhaXJlIGR1cmVyIGxlIHBsYWlzaXINCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEludmVyc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgZXQgaW52ZXJzZXIgbCdvcmRyZSBkZSBwcsOpc2VudGF0aW9uIGVuIGFqb3V0YW50IHVuZSB2aXJndWxlIGVudHJlIGxlcyBkZXV4ICANCg0KLSB2YWx1ZS5zcGxpdCgnICcpWzFdICsgIiwiICsgIiAiICsgdmFsdWUuc3BsaXQoJyAnKVswXQ0KDQpPVQ0KDQotIHZhbHVlLm1hdGNoKC8oLiopLCguKikvKS5yZXZlcnNlKCkuam9pbigiICIpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBam91dGVyIHVuIHrDqXJvIHBvdXIgYXZvaXIgdW4gbm9tYnJlIGRlIGNhcmFjdMOocmVzIHByw6ljaXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkFqb3V0ZXIgdW4gesOpcm8gZGV2YW50IGxlIGNvbnRlbnUgc2kgZG9ubmUgdW5lIGNoYWluZSBkZSAwIMOgIDIgY2FyYWN0w6hyZXMgIA0KDQotICIwIlswLDItbGVuZ3RoKHZhbHVlKV0gKyB2YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFwcGxpcXVlciBkZXMgY29uZGl0aW9ucw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRm9uY3Rpb24gaWYgLSBtw6ptZSBjaG9zZSBxdWUgZGFucyBleGNlbCAgDQoNCi0gaWYodGVzdCwgc2kgdGVzdCBlc3QgdnJhaSwgc2kgdGVzdCBlc3QgdnJhaSkNCg0KU2kgbGEgY2VsbHVsZSBjb250aWVudCB4LCDDqWNyaXJlIHgsIHNpbm9uIHkNCg0KLSBpZih2YWx1ZS5jb250YWlucygieCIpLCAieCIsICJ5IikNCiANCi0gaWYodmFsdWUuY29udGFpbnMoIjEiKSwgdmFsdWUsIG51bGwpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDb21wYXJlciBkZXV4IGNvbG9ubmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpJZGVudGlmaWVyIHNpIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUgZXN0IHBhcmVpbCDDoCB1bmUgYXV0cmUgIA0KDQotIHZhbHVlID09IGNlbGxzWydhdXRyZS1jb2xvbm5lJ10udmFsdWUNCg0KRXN0LWNlIHF1ZSBsZSBwcmVtaWVyIGNhcmFjdMOocmUgZGUgbGEgY29sb25uZSB4IGVzdCBsZSBtw6ptZSBxdWUgbGEgY29sb25uZSB5ICANCg0KLSBjZWxsc1siY29sb25uZTEiXS52YWx1ZVswXSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZVswXQ0KDQpDb21wYXJlciBsZSBjb250ZW51IGRlIGRldXggY29sb25uZXMgZXQgbW9kaWZpZXIgbGVzIHZhbGV1cnMgc2Vsb24gbGUgcsOpc3VsdGF0IGRlIGxhIGNvbmRpdGlvbiAgDQoNCi0gaWYoY2VsbHNbImNvbG9ubmUxIl0udmFsdWUgPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWUsICJQYXJlaWwiLCAiUGFzIHBhcmVpbCIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVsOpcmlmaWVyIGxlIGZvcm1hdCBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUudHlwZSgpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBGYWlyZSBkZXMgY2FsY3VscyBzaW1wbGVzICh2YWxldXJzIG51bcOpcmlxdWVzKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTb21tZSBkJ3VuZSBjb2xvbm5lIHBsdXMgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSArIGNlbGxzWydKb3VyIGR1IG1vaXMnXS52YWx1ZQ0KDQpBcnJvbmRpciBsZSBjb250ZW51ICANCg0KLSByb3VuZCh2YWx1ZSkNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlcHJlbmRyZSBldCBjb25jYXTDqW5lciBsZSBjb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBlbiBmdXNpb25uYW50IGxlIGNvbnRlbnUgZGUgZGV1eCBhdXRyZXMgZXQgYWpvdXRlciBkdSB0ZXh0ZSAgDQoNCi0gY2VsbHNbJ25vbSddLnZhbHVlICsgY2VsbHNbJ25vbSddLnZhbHVlICsgIkJvbmpvdXIhIg0KDQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgYXZlYyBsZXMgdHJvaXMgcHJlbWllcnMgY2FyYWN0w6hyZXMgc2V1bGVtZW50ICANCg0KLSBjZWxsc1snU3ltcHRvbWUnXS52YWx1ZVswLDNdDQoNClRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyAnICcgKyBjZWxsc1snc3RyZWV0LXR5cGUnXS52YWx1ZQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFJlbXBsYWNlciBkZXMgY2FyYWN0w6hyZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KUmVtcGxhY2VyIHRvdXQgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIChpY2ksIHZpZGVyIGxhIGNvbG9ubmUpICANCg0KLSB2YWx1ZS5yZXBsYWNlKHZhbHVlLCAiIikNCg0KUmVtcGxhY2VyIHVuZSBsZXR0cmUgcGFyIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUucmVwbGFjZUNoYXJzKCJvIiwgImEiKQ0KDQpGYWlyZSBwbHVzaWV1cnMgcmVtcGxhY2VtZW50cyBkJ3VuIGNvdXAgIA0KDQotIHZhbHVlLnJlcGxhY2UoIjEiLCAidW4iKS5yZXBsYWNlKCIyIiwgImRldXgiKS5yZXBsYWNlKCIzIiwgInRyb2lzIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJZGVudGlmaWVyIGRlcyBjZWxsdWxlcyBxdWkgY29tbWVuY2VudCBwYXIuLi4gKHLDqXN1bHRhdCBib29sw6llbikNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS5zdGFydHNXaXRoKCJCZXJyaSIpICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFN1cHByaW1lciB1biBjYXJhY3TDqHJlIGRlIGTDqWJ1dCBvdSBmaW4gZGUgdmFsZXVyOg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICANCg0KLSB2YWx1ZS5yZXBsYWNlKC9eUy8sIiIpIFtyZWdleCBeIGluZGlxdWUgbGUgZMOpYnV0IGQndW5lIGNlbGx1bGVdDQoNClN1cHByaW1lICIuIiDDoCBsYSBmaW4gZGUgbGEgY2VsbHVsZSAgDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpNb2RpZmllci9zdXBwcmltZXIgbGEgcG9uY3R1YXRpb24NCg0KLSB2YWx1ZS5yZXBsYWNlKC9ccHtQdW5jdH0vLCcgJykNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFRyYXZhaWxsZXIgYXZlYyB1biBmb3JtYXQgZGF0ZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXh0cmFpcmUgc2V1bGVtZW50IHVuZSBwYXJ0aWUgZCd1bmUgZGF0ZSAgDQoNCi0gdmFsdWUudG9EYXRlKCkuZGF0ZVBhcnQoInllYXIiKSAgDQoNCi0gIGRpZmYobm93KCksdmFsdWUsJ3dlZWtzJykgIA0KDQo8L2Rpdj4NCg0KDQoqKioNCg0KDQojIDE0LiBSZXNzb3VyY2VzDQoNCi0gW1NpdGUgZXQgZG9jdW1lbnRhdGlvbiBvZmZpY2llbHNdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvKQ0KDQotIEpvaG4gTGl0dGxlLCAyMDE4LCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vbGliam9obi5naXRodWIuaW8vb3BlbnJlZmluZS9pbmRleC5odG1sKSAgDQoNCi0gRXZhbiBXaWxsLCAyMDIxLCBbR2V0IFN0YXJ0ZWQgd2l0aCBPcGVuUmVmaW5lOiBFeHBsb3JlLCBDbGVhbiwgYW5kIFRyYW5zZm9ybSB5b3VyIERhdGEhXShodHRwczovL2V2YW53aWxsLmdpdGh1Yi5pby9vcGVucmVmaW5lLWIvKSAgDQoNCi0gVUNMQSwgMjAxOSwgW0dldHRpbmcgc3RhcnRlZCB3aXRoIE9wZW5SZWZpbmUgRGlnaXRhbCBIdW1hbml0aWVzIDIwMV0oaHR0cDovL21pcmlhbXBvc25lci5jb20vY2xhc3Nlcy9kaDIwMXcxOS90dXRvcmlhbHMtZ3VpZGVzL2RhdGEtY2xlYW5pbmctYW5kLW1hbmlwdWxhdGlvbi9nZXR0aW5nLXN0YXJ0ZWQtd2l0aC1vcGVucmVmaW5lLykNCg0KLSBbUmVmaW5lUHJvIEtub3dsZWRnZSBCYXNlIGZvciBPcGVuUmVmaW5lXShodHRwczovL2tiLnJlZmluZXByby5jb20vKQ0KDQotIFNldGggdmFuIEhvb2xhbmQsIFJ1YmVuIFZlcmJvcmdoLCBhbmQgTWF4IERlIFdpbGRlLCBbQ2xlYW5pbmcgRGF0YSB3aXRoIE9wZW5SZWZpbmVdKGh0dHBzOi8vcHJvZ3JhbW1pbmdoaXN0b3JpYW4ub3JnL2VuL2xlc3NvbnMvY2xlYW5pbmctZGF0YS13aXRoLW9wZW5yZWZpbmUpDQoNCi0gW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwczovL2RvYW5hLmdpdGJvb2tzLmlvL3Rlc3QvY29udGVudC8pDQoNCi0gRGF0YSBDYXJwZW50cnksIFtEYXRhIENsZWFuaW5nIHdpdGggT3BlblJlZmluZSBmb3IgRWNvbG9naXN0c10oaHR0cHM6Ly9kYXRhY2FycGVudHJ5Lm9yZy9PcGVuUmVmaW5lLWVjb2xvZ3ktbGVzc29uLzAwLWdldHRpbmctc3RhcnRlZC9pbmRleC5odG1sKQ0KDQotIE93ZW4gU3RlcGhlbnMsIDIwMTQsIFtJbnRyb2R1Y3Rpb24gdG8gT3BlblJlZmluZV0oaHR0cDovL3d3dy5tZWFuYm95ZnJpZW5kLmNvbS9vdmVyZHVlX2lkZWFzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzExL0ludHJvZHVjdGlvbi10by1PcGVuUmVmaW5lLWhhbmRvdXQtQ0MtQlkucGRmKQ0KDQotIFZlcmJvcmdoIGV0IERlIFdpbGRlLCAyMDEzLCBbVXNpbmcgT3BlblJlZmluZV0oaHR0cHM6Ly93d3cuZ2JpZi5lcy93cC1jb250ZW50L3VwbG9hZHMvMjAxOC8wMS9Vc2luZy1PcGVuUmVmaW5lQm9vay5wZGYpDQoNCi0gW0xpYnJhcnkgQ2FycGVudHJ5OiBPcGVuUmVmaW5lXShodHRwczovL2xpYnJhcnljYXJwZW50cnkub3JnL2xjLW9wZW4tcmVmaW5lLzAxLWludHJvZHVjdGlvbi9pbmRleC5odG1sKQ0KDQotIFtHcmF0ZWZ1bCBEYXRhXShodHRwczovL2dpdGh1Yi5jb20vc2NvdHR5dGhlcmVkL2dyYXRlZnVsZGF0YS93aWtpKSAgDQoNCi0gW0RhdmlkIEh1eW5oLCBHb29nbGUgUmVmaW5lXShodHRwOi8vd3d3LmRhdmlkaHV5bmgubmV0L3NwYWNlcy9uaWNhcjIwMTEvdHV0b3JpYWwucGRmKQ0KDQotIFtPcGVuIFJlZmluZSBGT3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vKQ0KDQotIFtDaGVhdCBTaGVldDogUmVndWxhciBFeHByZXNzaW9ucyAmIEdSRUxdKGh0dHBzOi8vY29kZTRsaWJ0b3JvbnRvLmdpdGh1Yi5pby8yMDE4LTEwLTEyLWFjY2Vzcy9Hb29nbGVSZWZpbmVDaGVhdFNoZWV0cy5wZGYpDQoNCi0gKlJlY2lwZXMqOiBbT3BlbiBSZWZpbmUgZm9yIExpYnJhcmlhbnNdKGh0dHA6Ly9saXdvbmcuYmxvZ3Nwb3QuY29tL3NlYXJjaC9sYWJlbC9yZWNpcGUpDQoNCi0gW0dSRUwgUmVjaXBlc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY2lwZXMpDQoNCi0gW0V0YyFdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9FeHRlcm5hbC1SZXNvdXJjZXMpDQoNCg0KPHN0eWxlPg0KLnJpZ2h0IHsNCiBmbG9hdDogcmlnaHQ7DQp9DQoNCi5jZW50ZXIgew0KIGFsaWduOiBjZW50ZXI7DQp9DQoNCi5ub3RlIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJvcmRlci1zdHlsZTogc29saWQ7DQogIGJvcmRlci1jb2xvcjogZ3JlZW47DQogIGJvcmRlci13aWR0aDogdGhpbjsNCiAgZm9udC1zaXplOiA5MCU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gxIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICNlMGViZWI7DQogIGNvbG9yOiBibGFjazsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDIgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogIzkyYjliOTsNCiAgY29sb3I6IHdoaXRlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KLmNlbnRlciB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCn0NCg0KLnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KLnN1YnRpdGxlIHsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGxlZ2VuZCB7DQogIGNvbG9yOiAjNUE3QjlDOw0KfQ0KDQo8L3N0eWxlPg==